home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
TURB_VIS
/
TCYBER25
/
COMMON.ZIP
/
SNIP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-10-20
|
9KB
|
87 lines
{
Turbo Vision CyberTools 2.5
(C) 1994 Steve Goldsmith
All Rights Reserved
}
UNIT SNIP ;{$I APP.INC} INTERFACE USES DOS , OBJECTS , {$IFDEF UseDLL} CYBERAPI ;{$ELSE} VGA ;{$ENDIF}
TYPE SNPFRAMETABLE =ARRAY [ 0 .. 16379 ] OF LONGINT ;SNPHEADER =RECORD VERSION , FRAMES , HORZRES , VERTRES ,
RESERVED1 , DELAY , RESERVED2 , RESERVED3 :WORD ;END ;PREADSNPFILE =^TREADSNPFILE ;
TREADSNPFILE =OBJECT (TOBJECT)READERROR :INTEGER ;BUFSIZE :WORD ;SNIPFILE :FILE ;READBLOCKPTR :VGADATABUFPTR ;
FRAMETABLEPTR :^SNPFRAMETABLE ;HEADER :SNPHEADER ;CONSTRUCTOR INIT (FILENAME :PATHSTR );DESTRUCTOR DONE ;VIRTUAL;
FUNCTION READFRAME (BLOCKLOC :LONGINT ;BLOCKSIZE :WORD ):WORD ;PROCEDURE READPAL256 (PALPTR :VGAPALETTEPTR );
PROCEDURE READFRAMETABLE ;END ;PDECODESNPFILE =^TDECODESNPFILE ;TDECODESNPFILE =OBJECT (TREADSNPFILE)XSIZE ,
YSIZE :WORD ;PALPTR :VGAPALETTEPTR ;DECODEBLOCKPTR :VGADATABUFPTR ;CONSTRUCTOR INIT (FILENAME :PATHSTR );DESTRUCTOR DONE
;VIRTUAL;PROCEDURE DECODEDATA (ENCODE ,DECODE:POINTER );PROCEDURE DECODEFRAME (FRAMENUM :WORD );END ;
PDECODESNPSCR =^TDECODESNPSCR ;TDECODESNPSCR =OBJECT (TREADSNPFILE)XSIZE , YSIZE :WORD ;PALPTR :VGAPALETTEPTR ;
DECODEBLOCKPTR :VGADATABUFPTR ;CONSTRUCTOR INIT (FILENAME :PATHSTR );DESTRUCTOR DONE ;VIRTUAL;PROCEDURE DECODEDATA
(ENCODE ,DECODE:POINTER ;SNIPWIDTH ,SCRWIDTH:WORD );PROCEDURE DECODEFRAME (FRAMENUM :WORD );END ;
PWRITESNPFILE =^TWRITESNPFILE ;TWRITESNPFILE =OBJECT (TOBJECT)WRITEERROR :INTEGER ;WRITEBUFPOS :WORD ;SNIPFILE :FILE ;
WRITEBLOCKPTR :VGADATABUFPTR ;FRAMETABLEPTR :^SNPFRAMETABLE ;HEADER :SNPHEADER ;CONSTRUCTOR INIT (FILENAME :PATHSTR ;
TOTFRAMES ,HORZ,VERT,FDELAY:WORD );DESTRUCTOR DONE ;VIRTUAL;PROCEDURE WRITEFRAMEBYTE (FBYTE :BYTE );PROCEDURE FLUSHBUF ;
PROCEDURE WRITEFIRSTFRAME (I :VGADATABUFPTR );PROCEDURE WRITEPAL256 (PALPTR :VGAPALETTEPTR );PROCEDURE WRITEFRAMETABLE ;
END ;CONST SNPMAXXSIZE =320 ;SNPMAXYSIZE =200 ;SNPMAXDECODESIZE =VGADATABUFMAX + 1 ;SNPMAXENCODESIZE =16384 ;
SNPNOERROR =0 ;SNPMEMALLOC =- 100 ;SNPBADVERSION =- 101 ;SNPNOT256COLOR =- 103 ;SNPXSIZE =- 104 ;SNPYSIZE =- 105 ;
SNPBUFOVERFLOW =- 106 ;SNPIORESULTSTART =100 ;SNPIORESULTEND =162 ;SNPVERSION =$0001 ;
IMPLEMENTATION USES MEMORY ;CONSTRUCTOR TREADSNPFILE.INIT (FILENAME:PATHSTR);BEGIN INHERITED INIT;ASSIGN (SNIPFILE ,
FILENAME );{$I-}RESET (SNIPFILE , 1 );{$I+}READERROR := IORESULT ;IF READERROR =SNPNOERROR THEN BEGIN {$I-}BLOCKREAD
(SNIPFILE , HEADER , SIZEOF (HEADER ));{$I+}READERROR := IORESULT ;IF READERROR =SNPNOERROR THEN BEGIN IF HEADER.VERSION
=SNPVERSION THEN BEGIN BUFSIZE := HEADER.HORZRES * HEADER.VERTRES + 1 ;IF BUFSIZE <= SNPMAXDECODESIZE THEN
BEGIN READBLOCKPTR := MEMALLOC (BUFSIZE );IF READBLOCKPTR =NIL THEN READERROR := SNPMEMALLOC ;FRAMETABLEPTR := MEMALLOC
((HEADER.FRAMES + 1 )* SIZEOF (LONGINT ));IF FRAMETABLEPTR =NIL THEN READERROR := SNPMEMALLOC END ELSE READERROR :=
SNPBUFOVERFLOW END ELSE READERROR := SNPBADVERSION END END END ;DESTRUCTOR TREADSNPFILE.DONE ;BEGIN IF READBLOCKPTR <>
NIL THEN FREEMEM (READBLOCKPTR , BUFSIZE );IF FRAMETABLEPTR <> NIL THEN FREEMEM (FRAMETABLEPTR , (HEADER.FRAMES + 1 )*
SIZEOF (LONGINT ));{$I-}CLOSE (SNIPFILE );{$I+}READERROR := IORESULT ;INHERITED DONE END ;FUNCTION TREADSNPFILE.READFRAME
(BLOCKLOC:LONGINT;BLOCKSIZE:WORD):WORD ;VAR O1lIII0lO0I1:WORD;BEGIN {$I-}SEEK (SNIPFILE , BLOCKLOC );{$I+}READERROR :=
IORESULT ;IF READERROR =SNPNOERROR THEN BEGIN {$I-}BLOCKREAD (SNIPFILE , READBLOCKPTR ^, BLOCKSIZE , O1lIII0lO0I1 );
{$I+}READERROR := IORESULT ;READFRAME := O1lIII0lO0I1 END ELSE READFRAME := 0 END ;PROCEDURE TREADSNPFILE.READPAL256
(PALPTR:VGAPALETTEPTR);BEGIN {$I-}SEEK (SNIPFILE , SIZEOF (HEADER ));{$I+}READERROR := IORESULT ;IF READERROR =SNPNOERROR
THEN BEGIN {$I-}BLOCKREAD (SNIPFILE , PALPTR ^, SIZEOF (PALPTR ^));{$I+}READERROR := IORESULT END END ;
PROCEDURE TREADSNPFILE.READFRAMETABLE ;BEGIN {$I-}SEEK (SNIPFILE , SIZEOF (HEADER )+ SIZEOF (VGAPALETTE ));
{$I+}READERROR := IORESULT ;IF READERROR =SNPNOERROR THEN BEGIN {$I-}BLOCKREAD (SNIPFILE , FRAMETABLEPTR ^,
(HEADER.FRAMES + 1 )* SIZEOF (LONGINT ));{$I+}READERROR := IORESULT END END ;CONSTRUCTOR TDECODESNPFILE.INIT
(FILENAME:PATHSTR);BEGIN INHERITED INIT(FILENAME );IF READERROR =SNPNOERROR THEN BEGIN IF HEADER.HORZRES <= SNPMAXXSIZE
THEN BEGIN IF HEADER.VERTRES <= SNPMAXYSIZE THEN BEGIN DECODEBLOCKPTR := MEMALLOC (HEADER.HORZRES * HEADER.VERTRES );IF
DECODEBLOCKPTR <> NIL THEN BEGIN XSIZE := HEADER.HORZRES ;YSIZE := HEADER.VERTRES ;PALPTR := MEMALLOC (SIZEOF (PALPTR
^))END ELSE READERROR := SNPMEMALLOC END ELSE READERROR := SNPYSIZE END ELSE READERROR := SNPXSIZE END END ;
DESTRUCTOR TDECODESNPFILE.DONE ;BEGIN IF DECODEBLOCKPTR <> NIL THEN FREEMEM (DECODEBLOCKPTR , XSIZE * YSIZE );IF PALPTR
<> NIL THEN FREEMEM (PALPTR , SIZEOF (PALPTR ^));INHERITED DONE END ;PROCEDURE TDECODESNPFILE.DECODEDATA
(ENCODE,DECODE:POINTER);ASSEMBLER;ASM {} PUSH DS {} LES SI , ENCODE{} LDS DI , DECODE{} MOV AX , 0 {} @while1 : {}
MOV AL , ES : [ SI ] {} CMP AL , 64 {} JB @while2 {} MOV DS : [ DI ] , AL {} INC SI {} INC DI {} JMP @while1 {}
@while2 : {} CMP AL , 0 {} JE @enddo2 {} INC SI {} ADD DI , AX {} JMP @while1 {} @enddo2 : {} POP DS {} END;
PROCEDURE TDECODESNPFILE.DECODEFRAME (FRAMENUM:WORD);BEGIN IF READERROR =SNPNOERROR THEN BEGIN READFRAME (FRAMETABLEPTR
^[ FRAMENUM ] , FRAMETABLEPTR ^[ FRAMENUM + 1 ] - FRAMETABLEPTR ^[ FRAMENUM ] );IF READERROR =SNPNOERROR THEN DECODEDATA
(READBLOCKPTR , DECODEBLOCKPTR )END END ;CONSTRUCTOR TDECODESNPSCR.INIT (FILENAME:PATHSTR);BEGIN INHERITED INIT(FILENAME
);IF READERROR =SNPNOERROR THEN BEGIN IF HEADER.HORZRES <= SNPMAXXSIZE THEN BEGIN IF HEADER.VERTRES <= SNPMAXYSIZE THEN
BEGIN DECODEBLOCKPTR := PTR (SEGA000 , $0000 );XSIZE := HEADER.HORZRES ;YSIZE := HEADER.VERTRES ;PALPTR := MEMALLOC
(SIZEOF (PALPTR ^))END ELSE READERROR := SNPYSIZE END ELSE READERROR := SNPXSIZE END END ;DESTRUCTOR TDECODESNPSCR.DONE ;
BEGIN IF PALPTR <> NIL THEN FREEMEM (PALPTR , SIZEOF (PALPTR ^));INHERITED DONE END ;PROCEDURE TDECODESNPSCR.DECODEDATA
(ENCODE,DECODE:POINTER;SNIPWIDTH,SCRWIDTH:WORD);ASSEMBLER;ASM {} PUSH DS {} LES SI , ENCODE{} LDS DI , DECODE{}
MOV AX , 0 {} MOV BX , SNIPWIDTH{} MOV CX , SCRWIDTH{} SUB CX , BX {} @while1 : {} MOV AL , ES : [ SI ] {} CMP AL , 64 {}
JB @while2 {} MOV DS : [ DI ] , AL {} INC SI {} INC DI {} DEC BX {} JNZ @while1 {} MOV BX , SNIPWIDTH{} ADD DI , CX {}
JMP @while1 {} @while2 : {} CMP AL , 0 {} JE @enddo2 {} INC SI {} CMP AX , BX {} JB @then1 {} ADD DI , AX {}
ADD DI , CX {} ADD BX , SNIPWIDTH{} SUB BX , AX {} JMP @while1 {} @then1 : {} ADD DI , AX {} SUB BX , AX {}
JMP @while1 {} @enddo2 : {} POP DS {} END;PROCEDURE TDECODESNPSCR.DECODEFRAME (FRAMENUM:WORD);BEGIN IF READERROR
=SNPNOERROR THEN BEGIN READFRAME (FRAMETABLEPTR ^[ FRAMENUM ] , FRAMETABLEPTR ^[ FRAMENUM + 1 ] - FRAMETABLEPTR ^[
FRAMENUM ] );IF READERROR =SNPNOERROR THEN DECODEDATA (READBLOCKPTR , DECODEBLOCKPTR , XSIZE , VGASCR256LINE )END END ;
CONSTRUCTOR TWRITESNPFILE.INIT (FILENAME:PATHSTR;TOTFRAMES,HORZ,VERT,FDELAY:WORD);BEGIN INHERITED INIT;ASSIGN (SNIPFILE ,
FILENAME );{$I-}REWRITE (SNIPFILE , 1 );{$I+}WRITEERROR := IORESULT ;IF WRITEERROR =SNPNOERROR THEN
BEGIN WITH HEADER DO BEGIN VERSION := SNPVERSION ;FRAMES := TOTFRAMES ;HORZRES := HORZ ;VERTRES := VERT ;RESERVED1 :=
HORZRES * VERTRES ;DELAY := FDELAY ;RESERVED2 := 64 ;RESERVED3 := 255 END ;{$I-}BLOCKWRITE (SNIPFILE , HEADER , SIZEOF
(HEADER ));{$I+}WRITEERROR := IORESULT ;WRITEBLOCKPTR := MEMALLOC (SNPMAXENCODESIZE );IF WRITEBLOCKPTR =NIL THEN
WRITEERROR := SNPMEMALLOC ;FRAMETABLEPTR := MEMALLOC ((HEADER.FRAMES + 1 )* SIZEOF (LONGINT ));IF FRAMETABLEPTR <> NIL
THEN FILLCHAR (FRAMETABLEPTR ^, (HEADER.FRAMES + 1 )* SIZEOF (LONGINT ), 0 )ELSE WRITEERROR := SNPMEMALLOC END END ;
DESTRUCTOR TWRITESNPFILE.DONE ;BEGIN IF WRITEBLOCKPTR <> NIL THEN FREEMEM (WRITEBLOCKPTR , SNPMAXENCODESIZE );IF
FRAMETABLEPTR <> NIL THEN FREEMEM (FRAMETABLEPTR , (HEADER.FRAMES + 1 )* SIZEOF (LONGINT ));{$I-}CLOSE (SNIPFILE );
{$I+}WRITEERROR := IORESULT ;INHERITED DONE END ;PROCEDURE TWRITESNPFILE.WRITEFRAMEBYTE (FBYTE:BYTE);BEGIN IF WRITEBUFPOS
=SNPMAXENCODESIZE THEN BEGIN {$I-}BLOCKWRITE (SNIPFILE , WRITEBLOCKPTR ^, SNPMAXENCODESIZE );{$I+}WRITEERROR := IORESULT
;WRITEBUFPOS := 0 END ;WRITEBLOCKPTR ^[ WRITEBUFPOS ] := FBYTE ;INC (WRITEBUFPOS )END ;PROCEDURE TWRITESNPFILE.FLUSHBUF ;
BEGIN IF WRITEBUFPOS > 0 THEN BEGIN {$I-}BLOCKWRITE (SNIPFILE , WRITEBLOCKPTR ^, WRITEBUFPOS );{$I+}WRITEERROR :=
IORESULT ;WRITEBUFPOS := 0 END END ;PROCEDURE TWRITESNPFILE.WRITEFIRSTFRAME (I:VGADATABUFPTR);BEGIN {$I-}BLOCKWRITE
(SNIPFILE , I ^, HEADER.HORZRES * HEADER.VERTRES );{$I+}WRITEERROR := IORESULT ;END ;PROCEDURE TWRITESNPFILE.WRITEPAL256
(PALPTR:VGAPALETTEPTR);BEGIN {$I-}SEEK (SNIPFILE , SIZEOF (HEADER ));{$I+}WRITEERROR := IORESULT ;IF WRITEERROR
=SNPNOERROR THEN BEGIN {$I-}BLOCKWRITE (SNIPFILE , PALPTR ^, SIZEOF (PALPTR ^));{$I+}WRITEERROR := IORESULT END END ;
PROCEDURE TWRITESNPFILE.WRITEFRAMETABLE ;BEGIN {$I-}SEEK (SNIPFILE , SIZEOF (HEADER )+ SIZEOF (VGAPALETTE ));
{$I+}WRITEERROR := IORESULT ;IF WRITEERROR =SNPNOERROR THEN BEGIN {$I-}BLOCKWRITE (SNIPFILE , FRAMETABLEPTR ^,
(HEADER.FRAMES + 1 )* SIZEOF (LONGINT ));{$I+}WRITEERROR := IORESULT END END ;END .